Advances in computer technology have led to increasingly faster microprocessors. These faster microprocessors are capable of running increasingly larger software applications, which require faster, higher capacity memory devices. At the same time, the trend in computer technology is toward smaller, lighter, and less expensive computers. When selecting a memory device, computer designers often have to trade speed for size, cost, or storage density. A wide variety of memory devices, each with certain strengths and weaknesses, is available. Among them, flash memory has proven to be particularly useful.
Flash memory is a nonvolatile rewritable memory. The read characteristics for a typical flash memory are similar to the read characteristics for other nonvolatile memories, such as readonly memory (ROM) devices. For example, a read operation for a typical high speed flash memory may take on the order of 80 nanoseconds (ns), which is comparable to many ROMs. Unlike ROM, however, flash memory can be erased and rewritten, although write and erase operations are significantly slower than read operations. For example, an erase operation may take on the order of one second, and a write operation may take on the order of 10 microseconds.
Even though the write and erase operations in flash memory are comparatively long, the nonvolatility and rewritability of flash memory are desirable features for a number of applications. For example, using flash to store a computer System's Basic Input Output system (BIOS) and boot code permits the user to update the BIOS without having to replace the storage medium. Flash memory is also useful for storing "ROM-able" (e.g. read only), or "read mostly" files. That is, since flash memory read operations are much faster than write and erase operations, flash is particularly useful for storing information that is primarily read. For instance, operating system and application files can be divided up into ROM-able and read/write portions. The ROM-able portions can be executed directly from flash memory, rather than waiting for the files to be loaded from a hard disk to random access memory (RAM).
Even in ROM-able, or infrequently updated applications, flash presents certain challenges. For instance, a flash memory read operation is typically asynchronous, meaning that data is read out of flash memory a set time after an address is provided. In other words, data is not provided in response to a clock signal. So, if the clock rate of a high speed bus connected to a flash memory is running faster than the access time of the flash memory, every memory access could introduce wait states on the high speed bus. Thus, a burst read operation might result in a wait state for each address read.
One approach to this problem is to perform a page read. Instead of reading one byte or word of data for each address, a page of data is read at a time. Each page of data includes a number of words of data. The words of data are buffered and provided to the bus synchronously, one word at a time. By reading data a page at a time, wait states are only incurred once every page of data rather than once every word or byte of data. When a large block of contiguous data is read from flash memory in a burst, however, the accumulated wait states can have a significant performance impact, even if wait states are incurred only once every page of data.